GtkWindow: Get the correct shadow width even before window is realized
authorJonas Ådahl <jadahl@gmail.com>
Wed, 29 Apr 2015 07:08:44 +0000 (15:08 +0800)
committerJonas Ådahl <jadahl@gmail.com>
Wed, 6 May 2015 11:55:20 +0000 (19:55 +0800)
The window state 'client_decorated' will only be set the window is being
realized. If anyone tries to get the shadow size before that it'd get
the with as if there always was no shadow.

This avoids negative sized opaque regions caused by the allocation being
smaller than shadow.

https://bugzilla.gnome.org/show_bug.cgi?id=748615

gtk/gtkwindow.c

index 5a57b775f58801e38d8bb66090ce6fa834fe02cb..2a85f1f24528f4385ab93749d9a8b230ea8d2a65 100644 (file)
@@ -6529,7 +6529,8 @@ static void
 get_shadow_width (GtkWidget *widget,
                   GtkBorder *shadow_width)
 {
-  GtkWindowPrivate *priv = GTK_WINDOW (widget)->priv;
+  GtkWindow *window = GTK_WINDOW (widget);
+  GtkWindowPrivate *priv = window->priv;
   GtkBorder border = { 0 };
   GtkBorder d = { 0 };
   GtkBorder margin;
@@ -6541,7 +6542,8 @@ get_shadow_width (GtkWidget *widget,
   *shadow_width = border;
 
   if (!priv->decorated ||
-      !priv->client_decorated)
+      !gtk_window_should_use_csd (window) ||
+      !gtk_window_supports_client_shadow (window))
     return;
 
   if (priv->maximized ||